package com.snow.java.base.junit;

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Set;

/**
 * @类名称：
 * @类描述：
 * @author: bingHeng
 * @Date 2019.04.13
 * @Version: 1.0
*/
public class MyDateTime4 {

    /**
     * 格式化时间和日期
     *
     * DateTimeFormatter : 该类下已经内置了很多，用的时候直接调用即可
     */

    public static void main(String[] args) {
        String format = LocalDateTime.now().format(DateTimeFormatter.ISO_DATE);
        System.out.println(format);

        // 自定义
        String yyyyMM = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMM"));
        System.out.println(yyyyMM);
        String format1 = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
        System.out.println(format1);

        // 将字符串还转换回日期格式
        String str = "2019-03-04 13:13:12";
        LocalDateTime yyyyMM1 = LocalDateTime.parse(str, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
        System.out.println(yyyyMM1);

        /**
         * Java 8中加入了对时区的支持，带时区的时间分别为：
         * ZonedDate、ZonedTime、ZonedDateTime
         *
         * 其中每个时区都对应着Id，地区Id都为“{区域}/{城市}”的格式：Asia/Shanghai
         *
         * ZoneId:该类中包含了所有的时区信息
         * getAvailableZoneIds() 可以获取所有时区的时区信息
         * of(id) 用指定的时区获取ZoneId对象
         */

        Set<String> availableZoneIds = ZoneId.getAvailableZoneIds();
        availableZoneIds.forEach(System.out::println); // 获取API中所有的时区

        // 获取指定时区的时间
        LocalDateTime now = LocalDateTime.now(ZoneId.of("Europe/Guernsey"));// 欧洲/根西岛
        System.out.println(now);

        // 带时区的时间和日期格式
        ZonedDateTime zonedDateTime = LocalDateTime.now().atZone(ZoneId.of("Europe/Guernsey"));
        System.out.println(zonedDateTime);


    }
}
